package com.yanyu.space.sys.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.yanyu.space.common.core.bean.db.PageEntity;
import com.yanyu.space.sys.bean.po.Role;
import com.yanyu.space.sys.bean.po.User;
import com.yanyu.space.sys.bean.vo.role.RoleAddVo;
import com.yanyu.space.sys.bean.vo.role.RoleSearchVo;
import com.yanyu.space.sys.bean.vo.role.RoleUpdateVo;

import java.util.List;
import java.util.Set;

/**
 * 系统角色 业务接口
 *
 * @author yanyu
 */
public interface IRoleService extends IService<Role> {

    /**
     * 分页查询
     *
     * @param vo
     * @return
     */
    PageEntity<Role> listPage(RoleSearchVo vo);

    /**
     * 根据id查询角色信息
     *
     * @param id
     * @return
     */
    Role getById(Long id);

    /**
     * 新增角色信息
     *
     * @param vo
     */
    void add(RoleAddVo vo);

    /**
     * 更新角色
     *
     * @param vo
     */
    void update(RoleUpdateVo vo);

    /**
     * 修改角色数据权限
     *
     * @param vo
     */
    void updateDataScope(RoleUpdateVo vo);

    /**
     * 修改角色状态
     *
     * @param vo
     */
    void updateStatus(RoleUpdateVo vo);

    /**
     * 删除角色
     *
     * @param ids
     */
    void delete(List<Long> ids);

    /**
     * 用户关联的角色
     *
     * @param userId
     * @param user
     */
    PageEntity<Role> listAllocated(Long userId, User user);

    /**
     * 用户关联的角色
     *
     * @param userId
     * @return
     */
    Set<String> listAllocated(Long userId);

    /**
     * 取消授权用户
     *
     * @param roleId
     * @param userIds
     */
    void delAllocatedUser(Long roleId, List<Long> userIds);

    /**
     * 用户授权
     *
     * @param roleId
     * @param userIds
     * @return
     */
    void addAllocatedUser(Long roleId, List<Long> userIds);

}
